// @Title  初始化gorm
// @Description  请填写文件描述（需要改）
// @Author  请填写自己的真是姓名（需要改）  2021/6/29 21:34
// @Update  请填写自己的真是姓名（需要改）  2021/6/29 21:34
package initialize

import (
	"gin_example/global"
	"gin_example/model/configs"
	"go.uber.org/zap"
	"moul.io/zapgorm2"
	"os"

	_ "github.com/go-sql-driver/mysql"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func initGorm(config configs.OrmConfig) {
	mysqlConfig := mysql.Config{
		DSN:                       config.MysqlDsn(), // DSN data source name
		DefaultStringSize:         191,               // string 类型字段的默认长度
		DisableDatetimePrecision:  true,              // 禁用 datetime 精度，MySQL 5.6 之前的数据库不支持
		DontSupportRenameIndex:    true,              // 重命名索引时采用删除并新建的方式，MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
		DontSupportRenameColumn:   true,              // 用 `change` 重命名列，MySQL 8 之前的数据库和 MariaDB 不支持重命名列
		SkipInitializeWithVersion: false,             // 根据版本自动配置
	}

	db, err := gorm.Open(mysql.New(mysqlConfig),
		&gorm.Config{
			SkipDefaultTransaction:                   true,
			DisableForeignKeyConstraintWhenMigrating: true,
			Logger:                                   zapgorm2.New(global.Logger),
		})
	if err != nil {
		global.Logger.Error("MySQL启动异常", zap.Any("err", err))
		os.Exit(0)
	} else {
		sqlDB, err := db.DB()
		if err != nil {
			global.Logger.Error("MySQL启动异常", zap.Any("err", err))
			os.Exit(0)
		}

		sqlDB.SetMaxIdleConns(config.MaxIdleConns)
		sqlDB.SetMaxOpenConns(config.MaxOpenConns)
	}
	global.GormDb = db

	global.Logger.Info("------gorm init success--------")
}
